use filetime::FileTime;
use std::fs::File;
use std::path::Path;
use std::time::SystemTime;

pub fn execute(args: &[String]) {
    if args.is_empty() {
        eprintln!("用法: touch <文件名>");
        return;
    }

    for file_name in args {
        let path = Path::new(file_name);

        if path.exists() {
            // 如果文件已存在，更新其最后修改时间
            if let Err(e) = update_file_timestamp(path) {
                eprintln!("无法更新 {} 的时间戳: {}", file_name, e);
            }
        } else {
            // 如果文件不存在，则创建新文件
            match File::create(path) {
                Ok(_) => println!("创建文件: {}", file_name),
                Err(e) => eprintln!("无法创建文件 {}: {}", file_name, e),
            }
        }
    }
}

// 更新文件的最后修改时间
fn update_file_timestamp(path: &Path) -> std::io::Result<()> {
    let now = SystemTime::now();
    filetime::set_file_times(path, FileTime::from(now), FileTime::from(now))?;
    Ok(())
}
